今天要來講的是 Hash,與前面的加密不同,以上是我了解後整理出 Hash 的特點。
而laravel官方使用 Bcrypt 和 Argon2 散列來存密碼,預設是 Bcrypt。
Bcrypt 在Hash中是很好的選擇,因為他有 Level 可以調整,在你的 Level 愈高,生成Hash時間就愈長,這個時間長度愈長是好的,這樣在黑客在生成彩虹表的時間就愈長,能更有效防止攻擊。
因此我們可以來看看這個時間的差異
$start_time = date("H")*3600+date("i")*60+date("s");
$hashed = Hash::make('password', [
'rounds' => 18,
]);
$end_time = date("H")*3600+date("i")*60+date("s");
$time_total = $end_time - $start_time;
echo "執行了:".$time_total."秒";
算一下他的時間,愈下面的時間 rounds 愈大,最下面的 rounds 為18,需要花13秒的時間計算
好,那我們來回顧一下之前我們如何儲存密碼到資料庫中的
User::create([
'account' => $account,
'password' => Hash::make($password),
'name' => Crypt::encryptString($username),
]);
一樣是使用 Hash::make 來散列密碼,而如何確認輸入的密碼與資料庫相同呢,是利用
Hash::check($password, $user->password)
這樣就能知道是否一致,若一致則回傳 true,好,今天的Hash就研究到這邊。